package com.lin.service;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.lin.customEnum.RecordStatus;
import com.lin.entity.po.Record;
import com.baomidou.mybatisplus.extension.service.IService;
import com.lin.entity.query.RecordQuery;
import com.lin.entity.vo.PageVO;
import com.lin.entity.vo.RecordVO;
import com.lin.entity.vo.RecordVO2;

import java.util.List;

public interface IRecordService extends IService<Record> {

    /**
     * 查询指定图书的借阅记录
     * 先查询Redis中是否存在对应数据,
     * 如果存在则直接返回, 否则查询数据库并返回
     * @param bookId 图书ID
     * @return RecordVO
     */
    RecordVO borrowBook(Integer bookId) throws JsonProcessingException;

    /**
     * 借阅记录 过期、未过期、归还
     * 先查询Redis中是否存在对应数据,
     * 如果存在则直接返回, 否则查询数据库并返回
     * @param recordId 借阅记录ID
     * @return RecordStatus
     */
    RecordStatus isExpired(Integer recordId) throws JsonProcessingException;

    /**
     * 查询当前用户借阅记录
     * 先查询Redis中是否存在对应数据,
     * 如果存在则直接返回, 否则查询数据库并返回
     * @param username 用户名
     * @return List<RecordVO>
     */
    List<RecordVO> getCurrentUserRecords(String username) throws JsonProcessingException;

    /**
     * 分页查询所有借阅记录
     * 先查询Redis中是否存在对应数据,
     * 如果存在则直接返回, 否则查询数据库并返回
     * @param recordQuery 查询参数
     * @return List<RecordVO>
     */
    PageVO<RecordVO2> getAllRecords(RecordQuery recordQuery) throws JsonProcessingException;
}
